home *** CD-ROM | disk | FTP | other *** search
- {
- Michael, you wondered how you could scroll an image (320*200) over the
- screen. And yes, as you probably have figured out, the most reliable
- solution to that is mode-x (or tweaked mode or whatever...).
- Here's an example program:
-
- --------------------------------------------------------->8-------------------
- {
-
- Mode-x scrolling, by Jens Larsson 2:201/2120.3, Sweden, PD.
- ( btw, hope you know some assembly... <g> )
-
- }
- {$G+}
- Uses Crt;
-
- Var i, ScrBase : Word;
-
- Procedure PutPix(x, y : Word; Color : Byte); Assembler;
- Asm
- mov ax,0a000h
- mov es,ax
- mov bx,x
- mov dx,3c4h
- mov ax,0102h
- mov cl,bl
- and cl,3
- shl ah,cl
- out dx,ax
- mov ax,y
- shl ax,4
- mov di,ax
- shl ax,2
- add di,ax
- shr bx,2
- add di,bx
- add di,ScrBase
- mov al,Color
- mov es:[di],al
- End;
-
- Procedure ScrPan(ScrOfs : Word); Assembler;
- Asm
- mov bx,ScrOfs
- mov dx,3d4h
- mov ah,bh
- mov al,0ch
- out dx,ax
- mov ah,bl
- inc al
- out dx,ax
- End;
-
- Procedure SetModeX; Assembler;
- Asm
- mov ax,0012h
- int 10h
- mov ax,0013h
- int 10h
- mov dx,3c4h
- mov ax,0604h
- out dx,ax
- mov dx,3d4h
- mov ax,0014h
- out dx,ax
- mov ax,0e317h
- out dx,ax
- End;
-
- Procedure Synk; Assembler;
- Asm
- mov dx,3dah
- @L1:
- in al,dx
- test al,08h
- jne @L1
- @L2:
- in al,dx
- test al,08h
- je @L2
- End;
-
- Begin
- Randomize;
- SetModeX;
- ScrBase := 200*80;
- For i := 0 to 9999 do PutPix(Random(320),Random(200),Random(256));
- For i := 0 to 200 do Begin
- ScrPan(i*80);
- Synk;
- End;
- ReadKey;
- Asm; mov ax,0003h; int 10h; End;
- End.
-